
TEST_DIR=dirTest
all:main.o #规则1
	@echo "this is all 111"

# '|'右边为命令提前目标
# 只有在生成目标文件不存在时，命令前提目标才会参与规则的执行。
# 但是，当生成目标文件存在时，命令前提目标不会参与规则的执行。
main.o : main.c func.o | ${TEST_DIR} #规则2
	@echo "gcc process 222"
	gcc -c main.c -o $@

func.o : func.c #规则3
	@echo "func gcc process 333"
	gcc -c func.c -o $@

${TEST_DIR}: #规则4
	@echo "creat the dirTest directory 444"
	mkdir -p dirTest

# = 是最基本的赋值
# make会将整个makefile展开后，再决定变量的值。也就是说，变量的值将会是整个makefile中最后被指定的值。
# := 是覆盖之前的值
# “:=”表示变量的值决定于它在makefile中的位置，而不是整个makefile展开后的最终值。
# ?= 是如果没有被赋值过就赋予等号后面的值
# += 是添加等号后面的值

A = $B "aaaa"
B = "bbbb1"
B := "bbbb2"
C = "cccc1"
C ?= $B "cccc"
D = $A
D += "dddd"

te : a b c d

a :
	@echo "A > $A"

b :
	@echo "B > $B"

c :
	@echo "C > $C"

d :
	@echo "D > $D"

